此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
JooLun版本
/**
* 发送微信订阅消息
* @param wxTemplateMsgSendDTO wxTemplateMsgSendDTO.useType、wxTemplateMsgSendDTO.page、wxTemplateMsgSendDTO.data、
* @param wxUser wxUser.appId、wxUser.openId、
*/
@Override
public void sendWxTemplateMsg(WxTemplateMsgSendDTO wxTemplateMsgSendDTO, WxUser wxUser) {
//查询订阅消息配置
WxTemplateMsg wxTemplateMsg = baseMapper.selectOne(Wrappers.<WxTemplateMsg>lambdaQuery()
.eq(WxTemplateMsg::getAppId,wxUser.getAppId())
.eq(WxTemplateMsg::getEnable, CommonConstants.YES)
.eq(WxTemplateMsg::getUseType,wxTemplateMsgSendDTO.getUseType()));
if(wxTemplateMsg !=null){
WxMaMsgService wxMaMsgService = WxMaConfiguration.getMaService(wxTemplateMsg.getAppId()).getMsgService();
WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();
subscribeMessage.setToUser(wxUser.getOpenId());
subscribeMessage.setTemplateId(wxTemplateMsg.getPriTmplId());
subscribeMessage.setPage(wxTemplateMsgSendDTO.getPage());
String content = wxTemplateMsg.getContent();
//提取模板中的参数
List<String> paramlist=new ArrayList<>();
Pattern p = Pattern.compile("(?<=\\{)[^\\}]+");
Matcher m = p.matcher(content);
while(m.find()){
paramlist.add(m.group().substring(1, m.group().length()));
}
List<WxMaSubscribeMessage.Data> listData = new ArrayList<>();
HashMap<String, HashMap<String, String>> dataMap = wxTemplateMsgSendDTO.getData();
paramlist.forEach(param -> {
param = param.replace(".DATA","");
if(dataMap.containsKey(param)){
WxMaSubscribeMessage.Data data = new WxMaSubscribeMessage.Data();
data.setName(param);
data.setValue(dataMap.get(param).get("value"));
listData.add(data);
}
});
subscribeMessage.setData(listData);
try {
wxMaMsgService.sendSubscribeMsg(subscribeMessage);
} catch (WxErrorException e) {
if(!WxReturnCode.ERR_43101.getCode().equals(e.getError().getErrorCode()+"")){
log.error(e.getMessage(),e);
}
}
}
}
- 使用订阅消息发送功能,比如:用户订单支付成功后要发消息通知用户,实现方法如下:
1、微信公众平台申请模板

2、将模板信息添加能JooLun后台,注:模板ID、模板内容一定要和微信公众平台申请的模板对应

3、发送订阅消息
//小程序端获取授权,参考:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html
let tmplIds = ['wetwqtwqyqwywq','sgsdgsaetwetwqt']
wx.requestSubscribeMessage({
tmplIds: tmplIds,
success(res) {
console.log(res)
}
})
//后台发送订阅消息,参考:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
try {
WxTemplateMsgSendDTO wxTemplateMsgSendDTO = new WxTemplateMsgSendDTO();
wxTemplateMsgSendDTO.setMallUserId(orderInfo.getUserId());
wxTemplateMsgSendDTO.setUseType(ConfigConstant.WX_TMP_USE_TYPE_2);
wxTemplateMsgSendDTO.setPage("pages/order/order-detail/index?id="+orderInfo.getId());
HashMap<String, HashMap<String, String>> data = new HashMap<>();
data.put("character_string1", (HashMap)JSONUtil.toBean("{\"value\": \""+orderInfo.getOrderNo()+"\"}",Map.class));
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm");
data.put("time4", (HashMap)JSONUtil.toBean("{\"value\": \""+orderInfo.getCreateTime().format(dtf)+"\"}",Map.class));
String thing3 = orderInfo.getName();
thing3 = thing3.length() > 40 ? thing3.substring(0,39) : thing3;
data.put("thing3", (HashMap)JSONUtil.toBean("{\"value\": \""+thing3+"\"}",Map.class));
data.put("amount2", (HashMap)JSONUtil.toBean("{\"value\": \""+orderInfo.getPaymentPrice()+"\"}",Map.class));
data.put("amount5", (HashMap)JSONUtil.toBean("{\"value\": \""+orderInfo.getPaymentPrice()+"\"}",Map.class));
wxTemplateMsgSendDTO.setData(data);
feignWxTemplateMsgService.sendTemplateMsg(wxTemplateMsgSendDTO, SecurityConstants.FROM_IN);
}catch (Exception e){
log.error("发送订阅消息发送出错:"+e.getMessage(), e);
}
4、相关说明

5、源码中的模板
订单支付成功模板
订单编号{{character_string1.DATA}}
订单金额{{amount2.DATA}}
商品名称{{thing3.DATA}}
下单时间{{time4.DATA}}
支付金额{{amount5.DATA}}
订单发货提醒
订单编号{{character_string1.DATA}}
商品详情{{thing2.DATA}}
快递单号{{character_string4.DATA}}
收货人{{name5.DATA}}
发货时间{{date10.DATA}}
按以上模板参数值申请的模板无需修改代码,如自己申请的模板参数和源码默认的不同,按实际情况改下代码即可